// const Promise = require('./source/3.promise')
const Promise = require('../source/01.promise')

// const p = new Promise((resolve, reject) => {
//     console.log('exectour立即执行')
//     // throw new Error('ERROR')
//     // setTimeout(() => {
//     resolve(1)
//     reject('error')
//     // }, 1000)

// }).then(res => {
//     console.log('res', res)
//     return new Promise((resolve,reject)=>{
//         setTimeout(()=>{
//             resolve(200)
//         },1000)
//     })
// }, err => {
//     console.log('err', err)
//     return 'error'
// })

// p.then(res => {
//     console.log(res, 'res')
// }, err => {
//     console.log(err, 'err')
// })

// const p = new Promise((resolve, reject) => {
//     resolve(new Promise((resolve, reject) => {
//         setTimeout(() => {
//             resolve(100)
//         })
//     }))
// }).then(res => {
//     console.log(res)
// }, err => {
//     console.log(err, 'err')
// })

// const p = new Promise((resolve,reject)=>{
//     setTimeout(()=>{
//         resolve(500)
//     },1000)
// }).then(data=>{
//     console.log(data)
// },err=>{
//     console.log(err)
// })
// Promise周边函数的实现
// Promise.reject(100).then(data => {
//     console.log(data)
// }).catch(err => {
//     console.log(err,'catch')
// })


// Promise.race([new Promise((resolve,reject)=>{
//     setTimeout(()=>{
//         reject(100)
//     },1000)
// }),new Promise((resolve,reject)=>{
//     setTimeout(()=>{
//         resolve(200)
//     },2000)
// })]).then(data=>{
//     console.log('all =>', data)
// }).catch(err=>{
//     console.log('err=>', err)
// })

/**
 * 无论成功或者失败，都可以执行
 * 既不接收成功值也不接收失败值
 * 不传递成功值，但是失败值可以传递下去
 */
new Promise((resolve, reject) => {
    reject(100)
}).finally(res => {
    console.log('finally', res)
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(200)
        }, 3000)
    })
}).then(data => {
    console.log(data)
}).catch(err => {
    console.log('err', err)
})


const arr = ['', '1', '2']
const newarr = arr.filter(item => Boolean(item))
console.log(newarr)


const bigArr = [
    {
        arr: [
            {
                sex: 'mal'
            }
        ],
        name: '张三'
    },
    {
        arr: [
            {
                sex: 'femal'
            }
        ],
        name: '李四'
    }
]

console.log(bigArr.filter(item => item.arr))
async function a() {
    console.log('a')
    await b()
    console.log('a end')
    // Promise.resolve(b()).then().then(res => {
    //     console.log('a end')
    // })
}

async function b() {
    console.log('b')
}


a()
console.log('main start')
setTimeout(function () {
    console.log('setTimeout')
}, 0)

new Promise(function (resolve, reject) {
    console.log('promise')
    resolve()
}).then(function () {
    console.log('then')
})

console.log('main end')